package com.wu.qqclient.service;

import com.wu.qqcommon.Message;
import com.wu.qqcommon.MessageType;


import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.Scanner;

public class ClientConnectServerThread extends Thread{

    //该线程需要持有Socket
    private Socket socket;

    //构造器接受一个Socket
    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    public Socket getSocket() {
        return socket;
    }

    @Override
    public void run() {
        //因为Thread需要在后台跟服务器进行通信，因此我们使用while循环
        while (true){
            try {
                System.out.println("---客户端线程，等待从读取从服务端发送的消息====");
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                //如果服务器没有发送消息则线程会阻塞在这里,,,,,,这个就很熟悉了，阻塞IO
                Message message = (Message) ois.readObject();
                //当我们发送我们的所需信息，就在这里接受服务器返回的数据
                //判断message类型，然后做相应的业务处理
                //如果读取的是在线用户列表，对应客户端输入的是1
                if (message.getMesType().equals(MessageType.MESSAGE_RET_ONLINE_FRIEND)){
                    //取出在线用户列表，并展示，，我们规定数据类型格式为 用户名+空格
                    System.out.println("==========当前在线用户列表==========");
                    String[] s = message.getContent().split(" ");
                    for (String onLineuser : s) {
                        System.out.println("用户："+onLineuser);
                    }
                }else if (message.getMesType().equals(MessageType.MESSAGE_COMM_MES)){
                    System.out.println("私聊信息：");
                    System.out.print(message.getSenter()+"对："+message.getGetter()+"说"+message.getContent());

                } else if (message.getMesType().equals(MessageType.MESSAGE_TO_ALL_MES)){
                    System.out.println("群发消息：");
                    System.out.print(message.getSenter()+"对大家说"+message.getContent());
                }else if (message.getMesType().equals(MessageType.MESSAGE_FILE_MES)){//传送文件的逻辑
                    //让用户指定保存路径。。。
                    System.out.println("\n" + message.getSenter() + " 给 " + message.getGetter()
                            + " 发文件: " + message.getSrc() + " 到我的电脑的目录 " + message.getDest());

                    //这里改进的地方就是，让用户自己去输入一个路径’


                    //取出message的文件字节数组，通过文件输出流写出到磁盘
                    FileOutputStream fileOutputStream = new FileOutputStream(message.getDest(), true);
                    fileOutputStream.write(message.getFileBytes());
                    fileOutputStream.close();
                    System.out.println("\n 保存文件成功~");

                }
                else{
                    System.out.println("其他的先暂时不处理。。。。。。。");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
